package desmontec.documentos

import java.util.GregorianCalendar;

import desmontec.funcionarios.Engenheiro
import desmontec.funcionarios.EngenheiroController;
import grails.test.*



class DPGFunctionalTest extends functionaltestplugin.FunctionalTestCase {
    protected void setUp() {
		super.setUp()
    }

    protected void tearDown() {
        super.tearDown()
    }
	
	void testCriarEngenheiro(){
		get("login/auth")
		
		form (){
			j_username = "admin"
			j_password = "12345678"
			
			click "logar"
		}
		
		// passo apenas para logar no sistema
		assertStatus 200
		
		get("/engenheiro/create")
		
		form () {
			nome = "Engenheiro"
			numeroCREA = "1234"
			click "create"
		}
		
		// passo apenas para criar um engenheiro no sistema
		assertStatus 200
	}
	
	void testCriarDPGSucesso(){
		// logar no sistema		
		get("login/auth")
		
		form (){
			j_username = "admin"
			j_password = "12345678"
			click "logar"
		}
		assertStatus 200
		
		// Criando uma DPG
		get("/DPG/criarDPG")
		form () {
			numero = "1234"
			beneficiario = "DPG 1"
			selects['responsavel.id'].select "1"
			click "create"
		}
		
		assertStatus 200 	
		assertContentContains "DPG 1"
		assertContentContains  "Engenheiro"
		
		// Criar a Quantidade de Materiais da DPG
		assertContentContains "Inserir Quantidade"
		form(){
			dinamite = 10
			espoleta = 10
			estopim = 10
			cordelDet = 10
			espoletim = 10
			retardo = 10
			click "create"
		}
		
		assertStatus 200
		assertContentContains "DPG criada com sucesso"
		
	}
	
	void testCriarDPGParametrosVazios(){
		// logar no sistema
		get("login/auth")
		
		form (){
			j_username = "admin"
			j_password = "12345678"
			click "logar"
		}
		assertStatus 200
		
		// Criando uma DPG
		get("/DPG/criarDPG")
		form () {
			click "create"
		}
		
		assertStatus 200
		assertContentContains "Por favor informe o numero da DPG"
		assertContentContains "Por favor informe o beneficiario da DPG"
		
	}
	
	void testCriarDPGNumeroDuplicado(){
		// logar no sistema
		get("login/auth")
		
		form (){
			j_username = "admin"
			j_password = "12345678"
			click "logar"
		}
		assertStatus 200
		
		// Criando uma DPG
		get("/DPG/criarDPG")
		form () {
			numero = "1234"
			beneficiario = "DPG 1"
			selects['responsavel.id'].select "1"
			click "create"
		}
		assertStatus 200
		assertContentContains "Ja existe uma DPG cadastrada com esse numero"
	}
	
	void testCriarDPGParametrosTipoIncorreto(){
		// logar no sistema
		get("login/auth")
		
		form (){
			j_username = "admin"
			j_password = "12345678"
			click "logar"
		}
		assertStatus 200
		
		// Criando uma DPG
		get("/DPG/criarDPG")
		form () {
			numero = "aaa"
			beneficiario = "1"
			selects['responsavel.id'].select "1"
			click "create"
		}
		assertStatus 200
		assertContentContains "Por favor insira um numero valido para a DPG"
	}
	
	void testCriarMateriaisLabelParametros(){
		// logar no sistema
		get("login/auth")
		
		form (){
			j_username = "admin"
			j_password = "12345678"
			click "logar"
		}
		assertStatus 200
		
		// Criando uma DPG
		get("/DPG/criarDPG")
		form () {
			numero = "4321"
			beneficiario = "DPG 2"
			selects['responsavel.id'].select "1"
			click "create"
		}
		
		assertStatus 200
		assertContentContains "DPG 2"
		assertContentContains  "Engenheiro"
		
		// Criar a Quantidade de Materiais da DPG
		assertStatus 200
		assertContentContains "Inserir Quantidade"
		assertContentContains "Dinamite (Quilo)"
		assertContentContains "Estopim (Metro)"
		assertContentContains "Espoletim (Peca)"
		assertContentContains "Espoleta (Unidade)"
		assertContentContains "Cordel Detonante (Metro)"
		assertContentContains "Retardo (Peca)"
		
	}
	
	void testCriarMateriaisParametrosVazio(){
		// logar no sistema
		get("login/auth")
		
		form (){
			j_username = "admin"
			j_password = "12345678"
			click "logar"
		}
		assertStatus 200
		
		// Criando uma DPG
		get("/DPG/criarDPG")
		form () {
			numero = "4321"
			beneficiario = "DPG 2"
			selects['responsavel.id'].select "1"
			click "create"
		}
		
		assertStatus 200
		assertContentContains "DPG 2"
		assertContentContains  "Engenheiro"
		
		// Criar a Quantidade de Materiais da DPG
		assertContentContains "Inserir Quantidade"
		form(){
			
			click "create"
		}
		
		assertStatus 200
		assertContentContains "Por favor informe a quantidade de Dinamite"
		assertContentContains "Por favor informe a quantidade de Retardo"
		assertContentContains "Por favor informe a quantidade de Dinamite"
		assertContentContains "Por favor informe a quantidade de Espoleta"
		assertContentContains "Por favor informe a quantidade de Espoletim"
		assertContentContains "Por favor informe a quantidade de Cordel Detonante"
		
	}
	
	void testCriarMateriaisParametrosTipoIncorreto(){
		// logar no sistema
		get("login/auth")
		
		form (){
			j_username = "admin"
			j_password = "12345678"
			click "logar"
		}
		assertStatus 200
		
		// Criando uma DPG
		get("/DPG/criarDPG")
		form() {
			numero = "4321"
			beneficiario = "DPG 2"
			selects['responsavel.id'].select "1"
			click "create"
		}
		
		assertStatus 200
		assertContentContains "DPG 2"
		assertContentContains  "Engenheiro"
		
		// Criar a Quantidade de Materiais da DPG
		assertContentContains "Inserir Quantidade"
		form() {
			dinamite = "a"
			espoleta = "a"
			estopim = "a"
			cordelDet = "a"
			espoletim = "a"
			retardo = "a"
			click "create"
		}
		
		assertStatus 200
		assertContentContains "Por favor insira um numero valido para Estopim"
		assertContentContains "Por favor insira um numero valido para Retardo"
		assertContentContains "Por favor insira um numero valido para Dinamite"
		assertContentContains "Por favor insira um numero valido para Espoleta"
		assertContentContains "Por favor insira um numero valido para Espoletim"
		assertContentContains "Por favor insira um numero valido para Cordel Detonante"
	}
	
	void testCriarMateriaisParametrosNegativos(){
		// logar no sistema
		get("login/auth")
		
		form (){
			j_username = "admin"
			j_password = "12345678"
			click "logar"
		}
		assertStatus 200
		
		// Criando uma DPG
		get("/DPG/criarDPG")
		form() {
			numero = "4321"
			beneficiario = "DPG 2"
			selects['responsavel.id'].select "1"
			click "create"
		}
		
		assertStatus 200
		assertContentContains "DPG 2"
		assertContentContains  "Engenheiro"
		
		// Criar a Quantidade de Materiais da DPG
		assertContentContains "Inserir Quantidade"
		form() {
			dinamite = -1
			espoleta = -1
			estopim = -1
			cordelDet = -1
			espoletim = -1
			retardo = -1
			click "create"
		}
		
		assertStatus 200
		assertContentContains "A quantidade minima para o material Espoletim deve ser maior que 0"
		assertContentContains "A quantidade minima para o material Retardo deve ser maior que 0"
		assertContentContains "A quantidade minima para o material Cordel Detonante deve ser maior que 0"
		assertContentContains "A quantidade minima para o material Espoleta deve ser maior que 0"
		assertContentContains "A quantidade minima para o material Estopim deve ser maior que 0"
	}
	
	void testCriarDPGDataSucesso(){
		// logar no sistema
		get("login/auth")
		
		form (){
			j_username = "admin"
			j_password = "12345678"
			click "logar"
		}
		assertStatus 200
		
		Calendar dataInicial = GregorianCalendar.getInstance();
		dataInicial.set(2011, 01, 01);
		
		Calendar dataFinal = GregorianCalendar.getInstance();
		dataFinal.set(2011, 06, 01);
		
		// Criando uma DPG
		get("/DPG/criarDPG")
		form () {
			numero = "6666"
			beneficiario = "DPG com Data"
			selects['responsavel.id'].select "1"
			inicioDoPrazoValidade = dataInicial.getTime()
			fimDoPrazoValidade = dataFinal.getTime()
 
			click "create"
		}
		
		assertStatus 200
		assertContentContains "DPG com Data"
		assertContentContains  "Engenheiro"
		
		// Criar a Quantidade de Materiais da DPG
		assertContentContains "Inserir Quantidade"
		form(){
			dinamite = 10
			espoleta = 10
			estopim = 10
			cordelDet = 10
			espoletim = 10
			retardo = 10
			click "create"
		}
		
		assertStatus 200
		assertContentContains "DPG criada com sucesso"
		
	}
	
}
